package lib

import (
	"sort"
	"strconv"
	"strings"
)

func init() {
	Probs = append(Probs, Problem{
		Num:         179,
		Discription: "重排数组顺序，使其字符串组合成为最大数",
		Level:       2,
		Labels: map[string]int{
			"贪心": 1,
			"排序": 1,
			"多元排序": 1,
		},
	})
}

func LargestNumber(nums []int) string {
    // 判断字符串连起来的ab和ba在数学上谁更大就行
	sort.Slice(nums, func(i, j int) bool {
		a := nums[i]
		b := nums[j]
		//从10开始，涵盖了包括0的情况
		xa := 10
		xb := 10
		//注意是<=
		for xa <= a {
			xa *= 10
		}
		for xb <= b {
			xb *= 10
		}

		return a*xb+b > b*xa+a
	})

    //考虑最高位都为0的情况（也就是全部为0）
	if nums[0] == 0 {
		return "0"
	}

	var builder strings.Builder
	for i := range nums {
		builder.WriteString(strconv.Itoa(nums[i]))
	}

	return builder.String()
}